

package com.xgit.iov.admin.controller;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xgit.iov.admin.service.SysDataRuleService;
import com.xgit.iov.common.core.entity.SysDataRule;
import com.xgit.iov.common.core.util.R;
import com.xgit.iov.common.log.annotation.LogAnnotation;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * @author william
 * @date 2020/5/28
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/datarule")
@Api(value = "datarule", tags = "数据权限模块")
public class DataRuleController {

	private final SysDataRuleService sysDataRuleService;

	/**
	 * 通过ID查询数据权限信息
	 *
	 * @param id ID
	 * @return 数据权限信息
	 */
	@GetMapping("/{id}")
	public R getById(@PathVariable Long id) {
		return R.ok(sysDataRuleService.getById(id));
	}

	/**
	 * 添加数据权限
	 *
	 * @param sysDataRule 数据权限信息
	 * @return success、false
	 */
	@LogAnnotation("添加数据权限")
	@PostMapping
	@PreAuthorize("@pms.hasPermission('sys_datarule_add')")
	public R save(@Valid @RequestBody SysDataRule sysDataRule) {
		return R.ok(sysDataRuleService.save(sysDataRule));
	}

	/**
	 * 修改数据权限
	 *
	 * @param sysDataRule 数据权限
	 * @return success/false
	 */
	@LogAnnotation("修改数据权限")
	@PutMapping
	@PreAuthorize("@pms.hasPermission('sys_datarule_edit')")
	public R update(@Valid @RequestBody SysDataRule sysDataRule) {
		return R.ok(sysDataRuleService.updateById(sysDataRule));
	}

	/**
	 * 删除数据权限
	 *
	 * @param id
	 * @return
	 */
	@LogAnnotation("删除数据权限")
	@DeleteMapping("/{id}")
	@PreAuthorize("@pms.hasPermission('sys_datarule_del')")
	public R removeById(@PathVariable Long id) {
		return R.ok(sysDataRuleService.removeDataRuleById(id));
	}

	/**
	 * 获取数据权限列表
	 *
	 * @return 数据权限列表
	 */
	@GetMapping("/list")
	public R listRoles() {
		return R.ok(sysDataRuleService.list(Wrappers.emptyWrapper()));
	}

	/**
	 * 分页查询数据权限信息
	 *
	 * @param page 分页对象
	 * @return 分页对象
	 */
	@GetMapping("/page")
	public R getRolePage(Page page, SysDataRule sysDataRule) {
		return R.ok(sysDataRuleService.page(page, Wrappers.<SysDataRule>lambdaQuery()
			.eq(ObjectUtil.isNotEmpty(sysDataRule.getMenuId()), SysDataRule::getMenuId, sysDataRule.getMenuId())));
	}

	/**
	 * 获取当前用户的数据权限
	 */
	@GetMapping("/getDataRule")
	public R getDataRule() {
		return R.ok(sysDataRuleService.getDataRule());
	}
}
